import 'package:cbec_app/utils/logger.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

///基本动画
class BaseAnimation extends StatefulWidget {
  ///动画时间
  final Duration duration;

  ///double动画初始值和结束值
  final List<double>? doubleValues;

  ///偏移动画初始值和结束值
  final List<Offset>? offsetValues;

  ///颜色动画初始值和结束值
  final List<Color>? colorValues;

  ///圆角动画初始值和结束值
  final List<double>? radiusValues;

  ///装饰动画初始值和结束值
  final List<Decoration>? decorationValues;

  ///文本样式动画初始值和结束值
  final List<TextStyle>? textStyleValues;

  final AnimationType animationType;

  ///需要绑定动画节点
  final Widget child;

  const BaseAnimation(
      {super.key,
      required this.child,
      this.duration = const Duration(milliseconds: 5000),
      this.doubleValues,
      this.offsetValues,
      this.colorValues,
      this.radiusValues,
      this.decorationValues,
      this.textStyleValues,
      this.animationType=AnimationType.doubleAnimation
      });

  @override
  State<StatefulWidget> createState() {
    return BaseAnimationState();
  }
}

class BaseAnimationState extends State<BaseAnimation>
    with SingleTickerProviderStateMixin {
  ///动画控制器
  late AnimationController _controller;
  //double类型动画
  late Animation<double> doubleAnimation;
  //颜色动画
  late Animation<Color?> colorAnimation;
  //位置动画
  late Animation<Offset> offsetAnimation;
  //圆角动画
  late Animation<BorderRadius?> radiusAnimation;
  //装饰动画
  late Animation<Decoration> decorationAnimation;
  //字体动画
  late Animation<TextStyle> textStyleAnimation;

  @override
  void initState() {
    logger.d('111 ${widget.doubleValues} ');
    super.initState();
    //创建AnimationController
    _controller = AnimationController(
      duration: widget.duration,
      vsync: this,
    );
    initAnimation();

    // ///常规动画
    // if (widget.doubleValues != null) {
    //   logger.d('执行 ${doubleAnimation.value}');
    //   doubleAnimation = Tween<double>(
    //           begin: widget.doubleValues?[0], end: widget.doubleValues?[1])
    //       .animate(_controller);
    // }

    // //偏移动画
    // if (widget.offsetValues != null) {
    //   offsetAnimation = _controller.drive(
    //       Tween(begin: widget.offsetValues?[0], end: widget.offsetValues?[1]));
    // }

    // ///颜色动画
    // if (widget.colorValues != null) {
    //   colorAnimation =
    //       ColorTween(begin: widget.colorValues?[0], end: widget.colorValues?[1])
    //           .animate(_controller);
    // }

    // ///圆角动画
    // if (widget.radiusValues != null) {
    //   radiusAnimation = BorderRadiusTween(
    //           begin: BorderRadius.circular(widget.radiusValues![0]),
    //           end: BorderRadius.circular(widget.radiusValues![1]))
    //       .animate(_controller);
    // }

    // ///装饰动画
    // if (widget.decorationValues != null) {
    //   decorationAnimation = DecorationTween(
    //           begin: widget.decorationValues?[0],
    //           end: widget.decorationValues?[1])
    //       .animate(_controller);
    // }

    // ///文本样式动画
    // if (widget.textStyleValues != null) {
    //   textStyleAnimation = TextStyleTween(
    //           begin: widget.textStyleValues?[0],
    //           end: widget.textStyleValues?[1])
    //       .animate(_controller);
    // }

    //启动动画
    _controller.forward();
    _controller.addListener(() {
      logger.d('动画值 ${doubleAnimation.value}');
      setState(() {});
    });
    _controller.addStatusListener((AnimationStatus status) {
      //执行完成后反向执行
      if (status == AnimationStatus.completed) {
        // controller.reverse();
        logger.d('动画完成');
      } else if (status == AnimationStatus.dismissed) {
        //反向执行完成，正向执行
        // controller.forward();
        logger.d('动画停留在初始位置');
      }
    });
  }
  Animation initAnimation(){
    switch(widget.animationType){
      
      case AnimationType.doubleAnimation:
        return doubleAnimation = Tween<double>(
              begin: widget.doubleValues?[0], end: widget.doubleValues?[1])
          .animate(_controller);
    }
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(animation: _controller, builder:(context, child) {
        return Container(
          height: doubleAnimation.value,
          child: widget.child,
        );
    },);
    // return Scaffold(
    //     appBar: AppBar(
    //       title: Text("Tween动画"),
    //     ),
    //     body: Container(
    //       alignment: Alignment.center,
    //       child: ListView(
    //         children: <Widget>[
    //           SizedBox(
    //             height: 200,
    //             child: Container(
    //               height: doubleAnimation.value,
    //               width: doubleAnimation.value,
    //               child: FlutterLogo(),
    //             ),
    //           ),
    //           Container(
    //             margin: EdgeInsets.only(left: offsetAnimation.value.dx),
    //             width: 50,
    //             height: 50,
    //             color: Colors.green,
    //           ),
    //           Container(
    //             height: 50,
    //             width: 50,
    //             color: colorAnimation.value,
    //           ),
    //           SizedBox(
    //             height: 10,
    //           ),
    //           Container(
    //             height: 50,
    //             width: 50,
    //             decoration: BoxDecoration(
    //                 borderRadius: radiusAnimation.value, color: Colors.blue),
    //           ),
    //           Container(
    //             height: 60,
    //             width: 200,
    //             decoration: decorationAnimation.value,
    //           ),
    //           Container(
    //             height: 50,
    //             child: Text(
    //               "Tween",
    //               style: textStyleAnimation.value,
    //             ),
    //           ),
    //         ],
    //       ),
    //     ));
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }
  void startAni(){
    _controller.forward();
  }
}
enum AnimationType{
  doubleAnimation,
  // //颜色动画
  // colorAnimation,
  // //位置动画
  // offsetAnimation,
  // //圆角动画
  // radiusAnimation,
  // //装饰动画
  // decorationAnimation,
  // //字体动画
  // textStyleAnimation,
}